package cn.tedu.cart.controller;

import cn.tdu.common.result.JsonResult;
import cn.tedu.cart.service.CartService;
import cn.tedu.pojo.param.CartAddParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * 处理所有和购物车相关的业务接口
 */
//组合注解 = @Controller @ResponseBody
@RestController
@Slf4j
public class CartController {
    /**
     * 添加购物车
     * @param param 添加购物车参数
     * @return 添加结果
     */
    @Autowired
    private CartService cartService;
    @PostMapping("/cart/add")
    public JsonResult addCart(CartAddParam cartAddParam){
        log.info("开始处理添加购物车业务,传入的参数：cartAddParam={}", cartAddParam);
        // 参数校验
        if (cartAddParam == null) {
            log.warn("购物车参数不能为空");
            return JsonResult.fail("购物车参数不能为空");
        }

        //调用业务层
        try {
            Boolean cartResult = cartService.addCart(cartAddParam);
            log.info("添加购物车结果：cartResult={}", cartResult);
            if (!cartResult){
                log.warn("添加购物车失败，参数: cartAddParam={}", cartAddParam);
                return JsonResult.fail("添加失败");
            }
            //使用JsonResult 不需要携带查询数据返回 直接返回
            log.info("添加购物车成功，参数: cartAddParam={}", cartAddParam);
            return JsonResult.ok("ok");//和前端约定好的结果 {"state":200,"message":"ok","data":null}
        } catch (Exception e) {
            log.error("添加购物车时发生异常：", e);
            return JsonResult.fail("系统繁忙，请稍后再试");
        }
    }

    /**
     * 删除购物车  基于用户删除对应的商品
     * @param userId 用户id
     * @param productCode 商品编号
     * @return 删除结果
     */
    @PostMapping("/cart/delete")
    public JsonResult deleteCart(@RequestParam("userId") String userId,
                                 @RequestParam("productCode") String productCode){
        log.info("开始处理删除购物车业务,传入的参数：userId={},productCode={}",userId,productCode);
        // 参数校验
        if (userId == null || userId.trim().isEmpty()) {
            log.warn("用户ID不能为空");
            return JsonResult.fail("用户ID不能为空");
        }

        if (productCode == null || productCode.trim().isEmpty()) {
            log.warn("商品编码不能为空");
            return JsonResult.fail("商品编码不能为空");
        }

        try {
            Boolean result = cartService.deleteCart(userId, productCode);
            if (result != null && result) {
                log.info("删除购物车成功，userId={}, productCode={}", userId, productCode);
                return JsonResult.ok("删除成功");
            } else {
                log.warn("删除购物车失败，userId={}, productCode={}", userId, productCode);
                return JsonResult.fail("删除购物车失败");
            }
        } catch (Exception e) {
            log.error("删除购物车时发生异常：", e);
            return JsonResult.fail("系统繁忙，请稍后再试");
        }
    }
}
